<html>
<head>
<meta charset="UTF-8">
<title>KBEngine - KBEngine interfaces 文档</title>
<link href="../../style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td align=left style="background:#708090"> <font size=15 color=#ffffff> KBEngine </font></td></tr>
</table> <hr>
<h1>KBEngine模块</h1>
<a href="KBEngine.html">KBEngine</a>模块主要处理KBEngine服务端与第三方平台的接入接出工作。


<h2><a href="#" onClick="obj=document.getElementById( 'functions' );vis = (obj.style.display == 'none') ? 'block' : 'none'; obj.style.display = vis; return false;" class="h2">成员函数</a></h2>
<table id="functions" cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr><td>
<span class="function_list">def <a href="#addTimer" class="function_list" >addTimer</a>( initialOffset, repeatOffset=0, callbackObj=None ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#accountLoginResponse" class="function_list" >accountLoginResponse</a>( commitName, realAccountName, extraDatas, errorCode ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#createAccountResponse" class="function_list" >createAccountResponse</a>( commitName, realAccountName, extraDatas, errorCode ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#chargeResponse" class="function_list" >chargeResponse</a>( orderID, extraDatas, errorCode ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#delTimer" class="function_list" >delTimer</a>( id ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#executeRawDatabaseCommand" class="function_list" >executeRawDatabaseCommand</a>( command, callback, threadID, dbInterfaceName ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#urlopen" class="function_list" >urlopen</a>( url, callback, postData, headers ):</span>
</td></tr>

</table>

<h2><a href="#" onClick="obj=document.getElementById( 'callbacks' );vis = (obj.style.display == 'none') ? 'block' : 'none'; obj.style.display = vis; return false;" class="h2">回调函数</a></h2>
<table id="callbacks" cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr><td>
<span class="function_list">def <a href="#onInterfaceAppReady" class="function_list" >onInterfaceAppReady</a>( ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#onInterfaceAppShutDown" class="function_list" >onInterfaceAppShutDown</a>( ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#onRequestCreateAccount" class="function_list" >onRequestCreateAccount</a>( registerName, password, datas ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#onRequestAccountLogin" class="function_list" >onRequestAccountLogin</a>( loginName, password, datas ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#onRequestCharge" class="function_list" >onRequestCharge</a>( ordersID, entityDBID, datas ):</span>
</td></tr>

</table>


<hr>
<h2>成员函数文档</h2>

<a name="addTimer"></a><p class="function_definition">
<span class="function_definition">def addTimer( <i>initialOffset, repeatOffset=0, callbackObj=None</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
注册一个定时器，定时器由回调函数callbackObj触发，回调函数将在"initialOffset"秒后被执行第1次，而后将每间隔"repeatOffset"秒执行1次。
<br><br>
例子:

<pre><pre># 这里是使用addTimer的一个例子
        import <a href="../Modules/KBEngine.html">KBEngine</a>
&nbsp;
        # 增加一个定时器，5秒后执行第1次，而后每1秒执行1次，用户参数是9
        KBEngine.addTimer( 5, 1, onTimer_Callbackfun )
&nbsp;
        # 增加一个定时器，1秒后执行，用户参数缺省是0
        KBEngine.addTimer( 1, onTimer_Callbackfun )
&nbsp;
    def onTimer_Callbackfun( id ):
        print "onTimer_Callbackfun called: id %i" % ( id )
        # if 这是不断重复的定时器，当不再需要该定时器的时候，调用下面函数移除:
        #     KBEngine.delTimer( id )</pre>
</pre>
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>initialOffset</i></span></td><td><span class="function_parameter_description">
float，指定定时器从注册到第一次回调的时间间隔（秒）。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>repeatOffset</i></span></td><td><span class="function_parameter_description">
float，指定第一次回调执行后每次执行的时间间隔（秒）。必须用函数<a href="#delTimer">delTimer</a>移除定时器，否则它会一直重复下去。值小于等于0将被忽略。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>callbackObj</i></span></td><td><span class="function_parameter_description">
function，指定的回调函数对象。
</span></td></tr>

</table>
</p>

<p>
<span class="function_return">返回:</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td>integer，该函数返回timer的内部id，这个id可用于<a href="#delTimer">delTimer</a>移除定时器。
</td></tr>
</table>
</p>



<a name="accountLoginResponse"></a><p class="function_definition">
<span class="function_definition">def accountLoginResponse( <i>commitName, realAccountName, extraDatas, errorCode</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
在onRequestAccountLogin被回调后，脚本需要调用此接口给出登陆处理结果。
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>commitName</i></span></td><td><span class="function_parameter_description">
string，客户端请求时所提交的名称。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>realAccountName</i></span></td><td><span class="function_parameter_description">
string，返回真实的账号名称（没有特殊要求通常就是commitName，使用各种别名账号登陆时可用到）。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>extraDatas</i></span></td><td><span class="function_parameter_description">
bytes，客户端请求时所附带的数据，可将数据转发第三方平台，在此提供对其进行修改的机会。该参数可以通过base实体的getClientDatas接口在脚本读取。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>errorCode</i></span></td><td><span class="function_parameter_description">
integer，错误码。如果需要中断用户的行为可在此设置错误码，错误码可参考（KBEngine.SERVER_ERROR_*， 描述在kbengine/kbe/res/server/server_errors.xml），否则提交KBEngine.SERVER_SUCCESS代表允许此处登陆。
</span></td></tr>

</table>
</p>



<a name="createAccountResponse"></a><p class="function_definition">
<span class="function_definition">def createAccountResponse( <i>commitName, realAccountName, extraDatas, errorCode</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
在onRequestCreateAccount被回调后，脚本需要调用此接口给出账号创建处理结果。
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>commitName</i></span></td><td><span class="function_parameter_description">
string，客户端请求时所提交的名称。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>realAccountName</i></span></td><td><span class="function_parameter_description">
string，返回真实的账号名称（没有特殊要求通常就是commitName，使用各种别名账号登陆时可用到）。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>extraDatas</i></span></td><td><span class="function_parameter_description">
bytes，客户端请求时所附带的数据，可将数据转发第三方平台，在此提供对其进行修改的机会。该参数可以通过base实体的getClientDatas接口在脚本读取。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>errorCode</i></span></td><td><span class="function_parameter_description">
integer，错误码。如果需要中断用户的行为可在此设置错误码，错误码可参考（KBEngine.SERVER_ERROR_*， 描述在kbengine/kbe/res/server/server_errors.xml），否则提交KBEngine.SERVER_SUCCESS代表允许此处登陆。
</span></td></tr>

</table>
</p>



<a name="chargeResponse"></a><p class="function_definition">
<span class="function_definition">def chargeResponse( <i>orderID, extraDatas, errorCode</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
在onRequestCharge被回调后，脚本需要调用此接口给出计费处理结果。
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>ordersID</i></span></td><td><span class="function_parameter_description">
string，订单的ID。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>extraDatas</i></span></td><td><span class="function_parameter_description">
bytes，客户端请求时所附带的数据，可将数据转发第三方平台，在此提供对其进行修改的机会。该参数可以通过base实体的getClientDatas接口在脚本读取。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>errorCode</i></span></td><td><span class="function_parameter_description">
integer，错误码。如果需要中断用户的行为可在此设置错误码，错误码可参考（KBEngine.SERVER_ERROR_*， 描述在kbengine/kbe/res/server/server_errors.xml），否则提交KBEngine.SERVER_SUCCESS代表允许此处登陆。
</span></td></tr>

</table>
</p>



<a name="delTimer"></a><p class="function_definition">
<span class="function_definition">def delTimer( <i>id</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
函数delTimer用于移除一个注册的定时器，移除后的定时器不再执行。只执行1次的定时器在执行回调后自动移除，不必要使用delTimer移除。
如果delTimer函数使用一个无效的id（例如已经移除），将会产生错误。
<br><br>
到KBEngine.addTimer</a>参考定时器的一个使用例子。
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>id</i></span></td><td><span class="function_parameter_description">
integer，它指定要移除的定时器id。
</span></td></tr>

</table>
</p>



<a name="executeRawDatabaseCommand"></a><p class="function_definition">
<span class="function_definition">def executeRawDatabaseCommand( <i>command, callback, threadID, dbInterfaceName</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
这个脚本函数在数据库上执行原始数据库命令，该命令将直接由相关数据库进行解析。
<br><br>
请注意使用该函数修改实体数据可能不生效，因为如果实体已经检出，被修改过的实体数据将仍会被实体存档而导致覆盖。<br>
强烈不推荐这个函数用于读取或修改实体数据。
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>command</i></span></td><td><span class="function_parameter_description">
这个数据库命令将会因为不同数据库配置方案而不同。对于方案为MySQL数据库它是一个SQL查询语句。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>callback</i></span></td>
<td><p class="function_parameter_description">
可选参数，带有命令执行结果的回调对象（比如说是一个函数）。这个回调带有4个参数：结果集合，影响的行数，自増长值，错误信息。
<br>
声明样例：<br>
def 
sqlcallback(result, rows, insertid, error):<br>
&nbsp;&nbsp;&nbsp;&nbsp;print(result, rows, insertid, error)  <br>
<br>
如同上面的例子所示，result参数对应的就是&ldquo;结果集合&rdquo;，这个结果集合参数是一个行列表。
每一行是一个包含字段值的字符串列表。<br>
命令执行没有返回结果集合（比如说是DELETE命令），
或者
命令执行有错误时这个结果集合为None。
<br><br>
rows参数则是&ldquo;影响的行数&rdquo;，它是一个整数，表示命令执行受影响的行数。这个参数只和不返回结果结合的命令（如DELETE）相关。<br>
如果有结果集合返回或者命令执行有错误时这个参数为None。
</p>
<p class="function_parameter_description">insertid对应的是&ldquo;自増长值&rdquo;，类似于实体的databaseID，当成功的向一张带有自増长类型字段的表中插入数据时，它返回该数据在插入时自増长字段所被赋于的值。<br>
更多的信息可以参阅mysql的mysql_insert_id()方法。另外，此参数仅在数据库类型为mysql时有意义。<br>
<br>
error则对应了&ldquo;错误信息&rdquo;，当命令执行有错误时，这个参数是一个描述错误的字符串。命令执行没有发生错误时这个参数为None。
</p></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>threadID</i></span></td><td><span class="function_parameter_description">
int32，可选参数，指定一个线程来处理本条命令。用户可以通过这个参数控制某一类命令的执行先后顺序（dbmgr是多线程处理的），默认是不指定，如果threadID是实体的ID，<br>
那么将加入到该实体的存档队列中由线程逐条写入。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>dbInterfaceName</i></span></td><td><span class="function_parameter_description">
string，可选参数，指定由某个数据库接口来完成, 默认使用"default"接口。数据库接口由kbengine_defaults.xml->dbmgr->databaseInterfaces中定义。
</span></td></tr>

</table>
</p>



<a name="urlopen"></a><p class="function_definition">
<span class="function_definition">def urlopen( <i>url, callback, postData, headers</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
这个脚本函数在提供对外HTTP/HTTPS异步请求。
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>url</i></span></td><td><span class="function_parameter_description">
有效的HTTP/HTTPS网址，字符串类型。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>callback</i></span></td>
<td><p class="function_parameter_description">
可选参数，带有请求执行结果的回调对象（比如说是一个函数）。这个回调带有5个参数：HTTP请求返回码（如：200)，返回的内容，返回的HTTP协议头，是否成功，请求的网址。
<br>
声明样例：<br>
def 
onHttpCallback(httpcode, data, headers, success, url):<br>
&nbsp;&nbsp;&nbsp;&nbsp;print(httpcode, data, headers, success, url)  <br>
<br>
如同上面的例子所示:
<br><p class="function_parameter_description"></p>httpcode:参数对应的就是&ldquo;HTTP请求返回码&rdquo;，这个结果集合参数是一个整形值。
<p class="function_parameter_description"></p>data:参数则是&ldquo;返回的内容&rdquo;，它是一个字符串。
</p>
<p class="function_parameter_description">headers:参数是&ldquo;服务器返回的HTTP协议头&rdquo;，如：{"Content-Type": "application/x-www-form-urlencoded"}，它是一个字典。
<p class="function_parameter_description"></p>success:则对应了&ldquo;执行是否成功&rdquo;，当请求执行有错误时，为False，可以通过httpcode进一步判断错误信息。
</p>
<p class="function_parameter_description">url:是&ldquo;请求所用的网址。
</p>
</td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>postData</i></span></td><td><span class="function_parameter_description">
可选参数，默认是GET方式请求服务器，如果需要POST方式请提供需要POST的内容，引擎将自动使用POST方式请求服务器，它是一个bytes。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>headers</i></span></td><td><span class="function_parameter_description">
可选参数，请求时使用的HTTP头，如：{"Content-Type": "application/x-www-form-urlencoded"}，它是一个字典。
</span></td></tr>

</table>
</p>



<hr>
<h2>回调函数文档</h2>

<a name="onInterfaceAppReady"></a><p class="function_definition">
<span class="function_definition">def onInterfaceAppReady( <i></i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
当前进程已经准备好的时候回调此函数。
<br>注意：该回调接口必须实现在入口模块(<a href=../../keywords.html#kbengine_defaults.xml>kbengine_defaults.xml</a>->entryScriptFile)中。
</div>



<a name="onInterfaceAppShutDown"></a><p class="function_definition">
<span class="function_definition">def onInterfaceAppShutDown( <i></i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
进程关闭会回调此函数。
<br>注意：该回调接口必须实现在入口模块(<a href=../../keywords.html#kbengine_defaults.xml>kbengine_defaults.xml</a>->entryScriptFile)中。
</div>



<a name="onRequestCreateAccount"></a><p class="function_definition">
<span class="function_definition">def onRequestCreateAccount( <i>registerName, password, datas</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
当客户端请求服务器创建账号时，该回调被调用。<br><br>

可在此函数内数据进行检查和修改，将最终结果通过KBEngine.createAccountResponse提交给引擎。
<br>
<br>注意：该回调接口必须实现在入口模块(<a href=../../keywords.html#kbengine_defaults.xml>kbengine_defaults.xml</a>->entryScriptFile)中。<br>
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>registerName</i></span></td><td><span class="function_parameter_description">
string，客户端请求时所提交的名称。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>password</i></span></td><td><span class="function_parameter_description">
string，密码。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>datas</i></span></td><td><span class="function_parameter_description">
bytes，客户端请求时所附带的数据，可将数据转发第三方平台。
</span></td></tr>
</table>
</p>



<a name="onRequestAccountLogin"></a><p class="function_definition">
<span class="function_definition">def onRequestAccountLogin( <i>loginName, password, datas</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
当客户端请求服务器登陆账号时，该回调被调用。<br><br>
可在此函数内数据进行检查和修改，将最终结果通过KBEngine.accountLoginResponse提交给引擎。
<br>
<br>注意：该回调接口必须实现在入口模块(<a href=../../keywords.html#kbengine_defaults.xml>kbengine_defaults.xml</a>->entryScriptFile)中。<br>
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>loginName</i></span></td><td><span class="function_parameter_description">
string，客户端请求时所提交的名称。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>password</i></span></td><td><span class="function_parameter_description">
string，密码。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>datas</i></span></td><td><span class="function_parameter_description">
bytes，客户端请求时所附带的数据，可将数据转发第三方平台。
</span></td></tr>
</table>
</p>



<a name="onRequestCharge"></a><p class="function_definition">
<span class="function_definition">def onRequestCharge( <i>ordersID, entityDBID, datas</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
当请求计费时（通常是baseapp上调用了KBEngine.charge），该回调被调用。<br><br>
可在此函数内数据进行检查和修改，将最终结果通过KBEngine.chargeResponse提交给引擎。
<br>
<br>注意：该回调接口必须实现在入口模块(<a href=../../keywords.html#kbengine_defaults.xml>kbengine_defaults.xml</a>->entryScriptFile)中。<br>
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>ordersID</i></span></td><td><span class="function_parameter_description">
uint64，订单的ID。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>entityDBID</i></span></td><td><span class="function_parameter_description">
uint64，提交订单的实体DBID。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>datas</i></span></td><td><span class="function_parameter_description">
bytes，客户端请求时所附带的数据，可将数据转发第三方平台。
</span></td></tr>
</table>
</p>



<hr>
<p class="copyrightFooter">版权归KBEngine所有。</p>
</body>
</html>